; Exercicio 1.31: produtorio

; Versão recursiva
(define (produtorio f a prox b)
  (if (> a b)
      1
      (* (f a)
         (produtorio f (prox a) prox b))))

; Versão iterativa
(define (produtorio-it f a prox b)
  (define (itera a resultado)
    (if (> a b)
        resultado
        (itera (prox a) (* (f a) resultado))))
  (itera a 1))

; Calculando fatorial
(define (inc x) (+ x 1))
(define (fatorial n)
  (produtorio identity 1 inc n))

; Aproximando pi
(define (pi-aprox n)
  (* 4
     (/ (produtorio fpares 1 inc n))
        (produtorio fimpares 1 inc n))))
(define (fpares i)
  (* 2 (quotient (+ i 2) 2)))
(define (fimpares i)
  (